package com.qf.service;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.cache.annotation.CacheKey;
import com.netflix.hystrix.contrib.javanica.cache.annotation.CacheRemove;
import com.netflix.hystrix.contrib.javanica.cache.annotation.CacheResult;
import com.qf.feign.SearchFeign;
import com.qf.pojo.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *  Spring 动态代理  ：
 *
 * @author lixu
 */
@Service
public class CustomerService {

    @Autowired
    private SearchFeign searchFeign;
    /**
     * 根据ID查询一个对象Cutomer
     *
     *   id：Integer  注意事项： 使用查询缓存 要求参数必须都是字符串 其它类型不生效
     *
     *
     *   缓存Key的组成
     *   1、@HystrixCommand(commandKey = "findById") : 缓存Key一部分
     *   2、@CacheKey String id   缓存Key的另一部分
     *   缓存Value的组成
     *    @CacheResult  方法的返回值就是缓存的Value
     */
    /**
     * 测试Hystrix缓存
     */
    //返回值Customer就是缓存的value值
    @CacheResult
    //这个findById就是缓存的key
    @HystrixCommand(commandKey = "findById")
    //参数也作为缓存key的一部分
    public Customer findById(@CacheKey Integer id){
        return searchFeign.findById(id);
    }

    /**
     * 清除缓存
     * @param id
     */
    @HystrixCommand
    @CacheRemove(commandKey = "findById")
    public void clearFindById(@CacheKey Integer id){
        System.out.println("findById被清空");
    }



}
